import requests
from bs4 import BeautifulSoup
# bs4是BeautifulSoup库的包名（Beautiful Soup 4版本）
# #BeautifulSoup是一个用于解析HTML和XML文档的Python库，用于提取和操作网页数据(用于网络爬虫数据抓取)
import os  # 提供了与操作系统交互的功能(文件目录创建删除遍历等，路径访问，进程管理)
import urllib.parse
from urllib.parse import urljoin # urljoin用于将两个URL进行智能拼接,它会根据相对路径和绝对路径的规则，正确地组合基础URL和目标URL


def download_img_from_url(url, save_folder):
    if not os.path.exists(save_folder):
        os.makedirs(save_folder)
    header_vals = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=header_vals, timeout=10)  # 发送请求给url
        response.raise_for_status()
        response.encoding = response.apparent_encoding  # 。response.apparent_encoding会自动检测响应内容的实际编码格式
        # )用于检查HTTP请求是否成功。如果响应状态码表示错误（如404、500等），则会抛出异常；如果请求成功（状态码200等），
        # 则不会执行任何操作，继续执行后续代码。
        soup = BeautifulSoup(response.text, 'html.parser')  # 使用html.parser解析器将响应结果解析为html 文档对象
        img_tags = soup.find_all('img')
        print(f"找到{len(img_tags)}个图片标签")
        for img_tag_index, img in enumerate(img_tags):
            img_url = img.get('src') or img.get('data-src')
            if not img_url:
                continue
            img_url = urljoin(url, img_url)
            print(f"正在处理{img_tag_index + 1}. 张图片: {img_url}")
    except Exception as e:
        print(f"获取网页内容失败: {e}")


# 使用enumerate函数同时获取每个图片标签的索引位置(img_tag)和标签对象(img)。这样可以在循环中既知道当前处理的是第几个图片标签，又能直接访问该图片标签对象进行后续的下载或其他操作。
target_url = "https://www.zhangxinxu.com/wordpress/2024/07/html%e5%b9%b6%e4%b8%8d%e7%ae%80%e5%8d%95/"
download_img_from_url(target_url, "download_images")

# enumerate()基本用法：
# 基本用法
# fruits = ['apple', 'banana', 'orange']
# for index, fruit in enumerate(fruits):
#     print(f"索引 {index}: {fruit}")
# 输出:
# 索引 0: apple
# 紴引 1: banana
# 索引 2: orange
